package br.home.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import br.home.entitys.Produto;
import br.home.entitys.Produtomesa;
import br.home.jdbc.ConnectionFactory;

public class ProdutoMesaDao {

	public static List<Produtomesa> selectAll(int idmesa) {
		List<Produtomesa> produtos = null;
		try {
			Connection con = ConnectionFactory.getConnection();
			String sql = "SELECT * FROM produtomesa pm INNER JOIN produto p ON pm.idmesa = ?"
					+ " AND pm.idproduto = p.idproduto ";
			PreparedStatement stmt = con.prepareStatement(sql);
			stmt.setInt(1, idmesa);
			ResultSet rs = stmt.executeQuery();
			// List<Produtomesa> produtos = new ArrayList<Produtomesa>();
			while (rs.next()) {
				if (produtos == null) {
					produtos = new ArrayList<Produtomesa>();
				}
				Produtomesa produtomesa = new Produtomesa();
				produtomesa.setIdprodutomesa(rs.getInt("idprodutomesa"));
				produtomesa.setIdmesa(rs.getInt("idmesa"));
				produtomesa.setQuantidade(rs.getInt("quantidade"));
				produtomesa.setPrecofinal(rs.getDouble("precofinal"));
				produtomesa.setIdproduto(rs.getInt("idproduto"));
				Produto produto = new Produto();
				produto.setNome(rs.getString("nome"));
				produto.setTipo(rs.getString("tipo"));
				produto.setPreco(rs.getDouble("preco"));
				produtomesa.setProduto(produto);
				produtos.add(produtomesa);
			}
			stmt.close();
			con.close();
			if (produtos != null) {
				return produtos;
			} else {
				return null;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	
	public static Boolean updateProdutoMesa(Produto produto, int idMesa, int quantidade){
		try{
		Connection con = ConnectionFactory.getConnection();
		String sql = "SELECT quantidade FROM produtomesa WHERE idproduto = ? AND idmesa=? LIMIT 1";
		PreparedStatement stmt = con.prepareStatement(sql);
		stmt.setInt(1, produto.getId());
		stmt.setInt(2, idMesa);
		ResultSet result = stmt.executeQuery();
		boolean existe = false;
		while (result.next()) {
			existe = true;
			quantidade += result
					.getInt("quantidade");
		}
		if (existe) {
			sql = "UPDATE produtomesa SET quantidade = ?,precofinal=? "
					+ "WHERE idproduto = ? AND idmesa = ?";
			stmt = con.prepareStatement(sql);
			stmt.setInt(1, quantidade);
			stmt.setDouble(2, (quantidade * produto
					.getPreco()));
			stmt.setInt(3, produto.getId());
			stmt.setInt(4, idMesa);
			existe = stmt.execute();
			stmt.close();
			con.close();
			if (!existe) {
				return true;
			} else {
				return false;
			}
		} else {
			sql = "INSERT INTO produtomesa(quantidade,"
					+ "precofinal,idmesa,idproduto) VALUES(?,?,?,?)";
			stmt = con.prepareStatement(sql);
			stmt.setInt(1, quantidade);
			stmt.setDouble(2, (quantidade * produto
					.getPreco()));
			stmt.setInt(3, idMesa);
			stmt.setInt(4, produto.getId());
			Boolean inserted = stmt.execute();
			stmt.close();
			con.close();
			if (!inserted) {
				return true;
			} else {
				return false;
			}
		}
		}catch(Exception e){
			e.printStackTrace();
			return false;
		}
	}
}
